package com.leetcode.June;

/**
 * @Description: 除自身以外数组的乘积
 * 初始化 ans[0] 为 1。
 * 计算 ans[1] 为 ans[0] * nums[0]，即 1 * 1 = 1。
 * 计算 ans[2] 为 ans[1] * nums[1]，即 1 * 2 = 2。
 * 计算 ans[3] 为 ans[2] * nums[2]，即 2 * 3 = 6。
 *
 * 初始化 R[nums.length-1] 为 1，即 R[3] 为 1。
 * 计算 R[2] 为 R[3] * nums[3]，即 1 * 4 = 4。
 * 计算 R[1] 为 R[2] * nums[2]，即 4 * 3 = 12。
 * 计算 R[0] 为 R[1] * nums[1]，即 12 * 2 = 24。
 * @Author: Mr.Fxy
 * @CreateTime: 2024-07-22 09:15
 */
public class LC238除自身以外数组的乘积 {
    public int[] productExceptSelf(int[] nums) {
        if (nums==null || nums.length==0) return new int[0];
        int[] ans = new int[nums.length];
        int[] R = new int[nums.length];
        ans[0] = 1;
        for (int i = 1; i < nums.length; i++) {
            ans[i] = ans[i-1] * nums[i-1];
        }
        R[nums.length-1] = 1;
        for (int i = nums.length-2; i >= 0; i--) {
            R[i] = R[i+1] * nums[i+1];
        }
        for (int i = nums.length-1; i >= 0; i--) {
            ans[i]*= R[i];
        }
        return ans;
    }
}
